package com.heshuo.basic.page;

import java.util.List;

/**
 * 封装分页和排序查询请求
 * 参考springside的ORM封装设计
 * @author zz
 *
 */
public class PageUtil <T>{
	 private List<T> result = null;
	/**
	 * 正向排序常量
	 */
	public static final String ASC="asc";
	/**
	 * 反向排序常量
	 */
	public static final String DESC="desc";
	/**
	 * 当前页序号
	 */
	private int currentPage = 0;
	/**
	 * 每页包含记录数量，默认设置10
	 */
	private int pageSize = 10;
	/**
	 * 当前页首条记录在总结果集中的位置
	 */
	private int pageStart;
	/**
	 * 当前页末条记录在总结果集中的位置
	 */
	private int pageEnd;
	/**
	 * 记录总行数
	 */
	private int totalRols;
	/**
	 *总页数 
	 */
	private int totalPage=1;
	/**
	 * 排序字段
	 */
	private String orderBy = null;
	/**
	 * 排序顺序
	 */
    private String order = ASC;
    
	public PageUtil() {
		
	}
	public PageUtil(int pageSize){
		this.pageSize = pageSize;
	}
	/**
	 * 获取每页包含记录数量，默认设置10
	 * @return
	 */
	public int getPageSize() {
		return pageSize;
	}
	/**
	 * 设置每页包含记录数量
	 * @param pageSize
	 */
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
	/**
	 * 获取当前页首条记录在总结果集中的位置
	 * @return
	 */
	public int getPageStart() {
		this.pageStart = (currentPage - 1) * pageSize;
		return pageStart;
	}

	/**
	 * 获取当前页末条记录在总结果集中的位置
	 * @return
	 */
	public int getPageEnd() {
		this.pageEnd = pageSize * currentPage - 1;
		if (this.pageEnd > totalRols) {
			this.pageEnd = totalRols - 1;
		}
		return pageEnd;
	}
	/**
	 * 获取当前页序号
	 * @return
	 */
	public int getCurrentPage() {
		return currentPage;
	}
	/**
	 * 设置当前页序号
	 * @param currentPage
	 */
	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}

	/**
	 * 获取总条数
	 * @return
	 */
	public int getTotalRols() {
		return totalRols;
	}
	/**
	 * 设置总条数
	 * @param totalRols
	 */
	public void setTotalRols(int totalRols) {
		this.totalRols = totalRols;
	}
	/**
	 * 获取总页数，根据总条数和每页记录数计算
	 * @return
	 */
	public int getTotalPage() {
		if (totalRols % pageSize == 0) {
			this.totalPage = totalRols / pageSize;
		} else {
			this.totalPage = totalRols / pageSize + 1;
		}
		return totalPage;
	}
	/**
	 * 获得排序字段
	 * @return
	 */
	public String getOrderBy() {
		return orderBy;
	}
	/**
	 * 设置排序字段
	 * @param orderBy
	 */
	public void setOrderBy(String orderBy) {
		this.orderBy = orderBy;
	}
	/**
	 * 获得排序顺序，默认顺序排序asc
	 */
	public String getOrder() {
		return order;
	}
	/**
	 * 设置排序顺序
	 * @param order
	 */
	public void setOrder(String order) {
		if (ASC.equalsIgnoreCase(order) || DESC.equalsIgnoreCase(order)) {   
            this.order = order.toLowerCase();   
        } else  
            throw new IllegalArgumentException(   
                    "order should be 'desc' or 'asc'"); 
	}
	
	/**  
     * 取得倒转的排序方向  
     */  
    public String getInverseOrder() {   
        if (order.endsWith(DESC))   
            return ASC;   
        else  
            return DESC;   
    }   
  
    /**  
     * 页内的数据列表.  
     */  
    public List<T> getResult() {   
        return result;   
    }   
  
    public void setResult(List<T> result) {   
        this.result = result;   
    }   
  
      
  
    /**  
     * 是否还有下一页.  
     */  
    public boolean isHasNext() {   
        return (currentPage + 1 <= getTotalPage());   
    }   
  
    /**  
     * 返回下页的页号,序号从1开始.  
     */  
    public int getNextPage() {   
        if (isHasNext())   
            return currentPage + 1;   
        else  
            return currentPage;   
    }   
  
    /**  
     * 是否还有上一页.   
     */  
    public boolean isHasPre() {   
        return (currentPage - 1 >= 1);   
    }   
  
    /**  
     * 返回上页的页号,序号从1开始.  
     */  
    public int getPrePage() {   
        if (isHasPre())   
            return currentPage - 1;   
        else  
            return currentPage;   
    }   
}
